<?php

//获取参数信息
$fm_id          = $route->bodyParams['fm_id'];
$fm_name        = $route->bodyParams['fm_name'];
$fm_install_dir = $route->bodyParams['fm_install_dir'];
$fm_dir_name    = $route->bodyParams['fm_dir_name'];

//保存每一步的操作结果
$resultInfo = array();

/******** 1-2、获取原子层接口新增数据，进行接口的新增操作 ********/

$atomicApiCreateResult = true; // 1-2 操作结果，是否有错误发生

$addApiDataPath = $fm_install_dir."/apiData/atomicApi.json";
if(!check_file_exists($addApiDataPath)){
    $response->responseData(false,"没有找到核心层API接口数据相关信息：".$addApiDataPath);
}

$addApiDataText = file_get_contents($addApiDataPath);
$addApiData     = json_decode($addApiDataText,true);

//循环数据进行相关信息的创建操作
for($i=0;$i<count($addApiData);$i++){

    //创建类别
    $categoryName = $addApiData[$i]['category'];

    $addCategoryParams = array(
        "apc_name" => $categoryName,
        "apc_type" => 2,
        "apc_fmid" => $fm_id
    );

    //创建类别
    $R1_2_1 = $db->mysqlDB->insert("sys_action_permissions_category",$addCategoryParams);

    if(!$R1_2_1){
        $atomicApiCreateResult = false;
    }

    //创建该类别下的接口
    $apiDataArr = $addApiData[$i]['apiInfo'];

    for($j=0;$j<count($apiDataArr);$j++){

        $apiItem = $apiDataArr[$j];

        $apiRequestArr = $apiItem['api_request_params'];

        //移除请求参数,剩下的参数为新增接口所用
        unset($apiItem['api_request_params']);

        //新增分类项
        $apiItem['ap_apcid'] = $R1_2_1;
        $apiItem['ap_fmid']  = $fm_id;

        //创建基本接口信息
        $R1_2_2 = $db->mysqlDB->insert("sys_action_permissions",$apiItem);

        if(!$R1_2_2){
            $atomicApiCreateResult = false;
        }

        //创建接口请求参数信息
        for($k=0;$k<count($apiRequestArr);$k++){

            $requestParams = $apiRequestArr[$k];

            //新增所属接口ID
            $requestParams['rp_apid'] = $R1_2_2;
            $requestParams['rp_fmid'] = $fm_id;

            //创建基本接口信息
            $R1_2_3 = $db->mysqlDB->insert("sys_request_parameter",$requestParams);

            if(!$R1_2_3){
                $atomicApiCreateResult = false;
            }

        }
    }

}

if(!$atomicApiCreateResult){
    $resultInfo["获取原子层接口新增数据，进行接口的新增操作"] = "[有部分失败新增失败]";
}else{
    $resultInfo["获取原子层接口新增数据，进行接口的新增操作"] = "[成功]";
}

/******** 1-3、获取聚合层接口新增数据，进行接口的新增操作 ********/

$aggregationApiCreateResult = true;

$addApiDataPath = $fm_install_dir."/apiData/aggregationApi.json";
if(!check_file_exists($addApiDataPath)){
    $response->responseData(false,"没有找到聚合层API接口数据相关信息：".$addApiDataPath);
}

$addApiDataText = file_get_contents($addApiDataPath);
$addApiData     = json_decode($addApiDataText,true);

//循环数据进行相关信息的创建操作
for($i=0;$i<count($addApiData);$i++){

    //创建类别
    $categoryName = $addApiData[$i]['category'];

    $addCategoryParams = array(
        "badc_name" => $categoryName,
        "badc_fmid" => $fm_id
    );

    //创建类别
    $R1_3_1 = $db->mysqlDB->insert("sys_bussiness_api_docs_category",$addCategoryParams);

    if(!$R1_3_1){
        $aggregationApiCreateResult = false;
    }

    //创建该类别下的接口
    $apiDataArr = $addApiData[$i]['apiInfo'];

    for($j=0;$j<count($apiDataArr);$j++){

        $apiItem = $apiDataArr[$j];

        $apiRequestArr = $apiItem['bad_request_params'];

        //移除请求参数,剩下的参数为新增接口所用
        unset($apiItem['bad_request_params']);

        //新增分类项
        $apiItem['bad_badcid'] = $R1_3_1;
        $apiItem['bad_fmid']   = $fm_id;

        //创建基本接口信息
        $R1_3_2 = $db->mysqlDB->insert("sys_bussiness_api_docs",$apiItem);

        if(!$R1_3_2){
            $aggregationApiCreateResult = false;
        }

        //创建接口请求参数信息
        for($k=0;$k<count($apiRequestArr);$k++){

            $requestParams = $apiRequestArr[$k];

            //新增所属接口ID
            $requestParams['badrp_badid'] = $R1_3_2;
            $requestParams['badrp_fmid']  = $fm_id;

            //创建基本接口信息
            $R1_3_3 = $db->mysqlDB->insert("sys_bussiness_api_docs_request_parameter",$requestParams);

            if(!$R1_3_3){
                $aggregationApiCreateResult = false;
            }

        }
    }

}

if(!$aggregationApiCreateResult){
    $resultInfo["获取聚合层接口新增数据，进行接口的新增操作"] = "[有部分失败新增失败]";
}else{
    $resultInfo["获取聚合层接口新增数据，进行接口的新增操作"] = "[成功]";
}

/******** 1-4、获取菜单相关信息数据，进行菜单表写入操作 ********/
// $menuCreateResult = true; // 1-4 操作结果，是否有错误发生

// $addMenuDataPath = $fm_install_dir."/menu/menu.json";
// if(!check_file_exists($addMenuDataPath)){
//     $response->responseData(false,"没有找到菜单相关信息：".$addMenuDataPath);
// }

// $addMenuDataText = file_get_contents($addMenuDataPath);
// $addMenuData     = json_decode($addMenuDataText,true);

// for($i=0;$i<count($addMenuData);$i++){

//     $level_1_menuData = $addMenuData[$i];

//     $addParams = array(
//         "m_name" => $level_1_menuData['m_name'],
//         "m_url"  => $level_1_menuData['m_url'],
//         "m_icon" => $level_1_menuData['m_icon'],
//         "m_path" => "0,",
//         "m_type" => "1",
//         "m_fmid" => $fm_id
//     );  

//     //新增一级菜单操作
//     $R1_4_1 = $db->mysqlDB->insert("sys_menu",$addParams);

//     if(!$R1_4_1){
//         $menuCreateResult = false;
//     }

//     $level_2_menuData = $level_1_menuData['child'];

//     //新增二级菜单
//     for($j=0;$j<count($level_2_menuData);$j++){

//         $level2_menuItem = $level_2_menuData[$j];

//         $addParams = array(
//             "m_name"  => $level2_menuItem['m_name'],
//             "m_url"   => $level2_menuItem['m_url'],
//             "m_icon"  => $level2_menuItem['m_icon'],
//             "m_level" => 1,
//             "m_fid"   => $R1_4_1,
//             "m_path"  => "0,".$R1_4_1.",",
//             "m_type"  => "1",
//             "m_fmid" => $fm_id
//         );  

//         //新增二级菜单操作
//         $R1_4_2 = $db->mysqlDB->insert("sys_menu",$addParams);

//         if(!$R1_4_2){
//             $menuCreateResult = false;
//         }

//         //新增三级菜单
//         $level3_menuData = $level2_menuItem['child'];

//         for($k=0;$k<count($level3_menuData);$k++){

//             $level3_menuItem = $level3_menuData[$k];

//             $addParams = array(
//                 "m_name"      => $level3_menuItem['m_name'],
//                 "m_url"       => $level3_menuItem['m_url'],
//                 "m_icon"      => $level3_menuItem['m_icon'],
//                 "m_route_url" => $level3_menuItem['m_route_url'],
//                 "m_level"     => 2,
//                 "m_fid"       => $R1_4_2,
//                 "m_path"      => "0,".$R1_4_1.",".$R1_4_2.",",
//                 "m_type"      => "1",
//                 "m_fmid"      => $fm_id
//             );

//             //新增三级菜单操作
//             $R1_4_3 = $db->mysqlDB->insert("sys_menu",$addParams);

//             if(!$R1_4_3){
//                 $menuCreateResult = false;
//             }

//         }
//     }
// }

// if(!$menuCreateResult){
//     $resultInfo["获取菜单相关信息数据，进行菜单表写入操作"] = "[有部分失败新增失败]";
// }else{
//     $resultInfo["获取菜单相关信息数据，进行菜单表写入操作"] = "[成功]";
// }

/******** 2、获取SQL文件并进行相关表与视图的创建工作 ********/
$sqlPath = $fm_install_dir."/database/database.sql";
if(!check_file_exists($sqlPath)){
    $response->responseData(false,"没有找到待创建数据表的SQL文件：".$sqlPath);
}

//获取要执行SQL文件的内容
$createTableSqlText = file_get_contents($fm_install_dir."/database/database.sql");

$SqlArr = explode(';', $createTableSqlText);

//获取需要创建的表总数
$createCount = $SqlArr[0];

//检测是否为数字
if(!is_numeric($createCount)){
    $response->responseData(false,"数据表创建失败，缺少顶部执行表总数声明");
}

//删除第一项总数信息
unset($SqlArr[0]);

//已成功数
$createSuccess = 0;

//循环进行表与视图的创建
foreach($SqlArr as $_sql){

  if(trim($_sql) == ""){
      continue;
  }  

  $createRS = $db->mysqlDB->queryTransaction(trim($_sql));

  //递增成功数
  if($createRS){
     $createSuccess++;
  }

}

//判断表是否全部创建成功
if($createSuccess != $createCount*2){
    $response->responseData(false,"数据表创建失败，请检查文件并重新尝试");
}

$resultInfo["获取SQL文件并进行相关表与视图的创建工作"] = "[成功]";

/******** 3、下载核心层扩展目录 ********/
$extensionZip = $fm_install_dir."/extension/extension.zip";
if(!check_file_exists($extensionZip)){
    $response->responseData(false,"没有找到扩展接口压缩包文件：".$extensionZip);
}

$saveDir  = "./temp/";
$fileName = "extension.zip";
$downData = getFile($extensionZip,$saveDir,$fileName);
if($downData){
   $response->responseData(false,"接口扩展文件下载失败,请重新尝试");
}

$zip = new ZipArchive;
$R2 = false;
if ($zip->open($saveDir.$fileName) === TRUE) {  //中文文件名要使用ANSI编码的文件格式
    $zip->extractTo('./temp/');                 //提取全部文件
    $zip->close();
    $R2 = true;
} else {
    $response->responseData(false,"接口扩展文件解压失败,请重新尝试");
}

$resultInfo["下载核心层扩展目录"] = "[成功]";

/******** 4、拷贝项目目录到扩展文件目录 ********/
$R3 = xCopy("./temp/".$fm_dir_name,"./extension/".$fm_dir_name,1);

$resultInfo["拷贝项目目录到扩展文件目录"] = "[成功]";

/******** 5、拷贝项目接口配置文件到并拷贝到扩展文件目录 ********/
$R4 = copy("./temp/".$fm_dir_name.".api.php","./extension/apiConfig/".$fm_dir_name.".api.php");

$resultInfo["拷贝项目接口配置文件到并拷贝到扩展文件目录"] = "[成功]";

$response->responseData(true,$resultInfo);



